package it.unisalento.appsalento.asynctask;

import it.unisalento.appsalento.constants.Constants;
import it.unisalento.appsalento.activity.App;
import it.unisalento.appsalento.activity.MainActivity;
import it.unisalento.appsalento.asynctask.framework.MIMETypes;
import it.unisalento.appsalento.model.Request;
import it.unisalento.appsalento.model.Response;

import java.io.IOException;
import java.lang.ref.WeakReference;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

public class AccettaRisultatoAsyncTask extends  ActionAsyncTask {
	
	private boolean accettazione;


	public AccettaRisultatoAsyncTask(String idAppello, boolean accettazione, MainActivity main ) {
		this.idAppello = idAppello;
		this.accettazione = accettazione;
		this.mainActivityWeakRef= new WeakReference<MainActivity >(main);
		mMessageResponse = "Voto non accettato per problemi interni al servizio";
	}
	
	public boolean setData( ObjectMapper mapper) throws JsonParseException, JsonMappingException, IOException{
		boolean retVal = false;
		
			Request request = new Request();
			request.setUtente(App.utente);
			request.setIdAppello(idAppello);
			request.setAccettazione(accettazione);
			final Gson gson = new GsonBuilder().create();
			final Client client = Client.create();
		    final WebResource resource = client.resource(Constants.URL_REST + Constants.SERVICE_ACCETTA_RISULTATO);
		    final ClientResponse response = resource.type(MIMETypes.APPLICATION_JSON.getName()).post(ClientResponse.class, gson.toJson(request));
//		    if (response.getStatus() != 201 && response.getStatus() != 200) {
//		      throw new RuntimeException("failed: http error code = " + response.getStatus());
//		    }
		    final String responseEntity = response.getEntity(String.class).replaceAll("\\\\", "");
		    Response accettazioneResponse = mapper.readValue(responseEntity,Response.class);
			if(accettazioneResponse != null){
				retVal = accettazioneResponse.isOk();
				mMessageResponse = accettazioneResponse.getMessaggio();
			}
		
		return retVal;
	}

	
}
